/*
 *  Copyright 2012 stefano.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */

/*
 
    Einstein ideò questo test affermando che il 98% della popolazione mondiale non sarebbe riuscita a risolverlo.
    Con un po’ di logica e intuito penso però che questo gioco sia fattibile per tutti.
    Dopo questa breve introduzione ecco il test:
    Ci sono 5 case di 5 colori diversi, in ogni casa vive una persona di nazionalità diversa.
    Ognuna di queste persone beve una bibita differente, fuma una diversa marca di sigarette e hanno un animale diverso.
    La domanda è: chi ha i pesci?
    
    Per scoprirlo avete i seguenti indizi:
        L’Inglese vive nella casa rossa.
        Lo Svedese ha cani.
        Il Danese beve the.
        La casa verde è a sinistra della bianca.
        L’abitante della casa verde beve caffè.
        La persona che fuma Marlboro alleva uccelli.
        L’abitante della casa gialla fuma Dunhill.
        L’abitante della casa al centro beve latte.
        Il Norvegese vive nella prima casa.
        La persona che fuma Blend vive accanto a quella che ha gatti.
        La persona che ha cavalli vive accanto a quella che fuma Dunhill.
        La persona che fuma Camel beve birra.
        Il Tedesco fuma Pall Mall.
        Il Norvegese vive accanto alla casa blu.
        La persona che fuma Blend ha un vicino che beve acqua. 

*/

/*
 * @author stefano
 */
package org.drools.examples.einstein;


import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class EinsteinExample {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add( ResourceFactory.newClassPathResource( "einstein.drl",
                                                                    EinsteinExample.class ),
                              ResourceType.DRL );

        final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

        String[] nazionalita = new String[]{"Inglese", "Svedese", "Danese", "Norvegese","Tedesco"};
        String[] colore = new String[]{"Rosso", "Blu", "Verde", "Bianco", "Giallo"};
        String[] animale = new String[]{"Cane", "Ucelli", "Gatti", "Cavalli", "Pesci"};
        String[] bevanda = new String[]{"The", "Latte", "Birra", "Acqua", "Caffe"};
        String[] sigarette = new String[]{"Marboro", "Dun Hill", "Blend", "Camel", "Pall Mall"};
        int[] posizione = new int[]{1, 2, 3, 4, 5};

        for ( int n = 0; n < nazionalita.length; n++ ) {
            for ( int c = 0; c < colore.length; c++ ) {
                for ( int a = 0; a < animale.length; a++ ) {
                    for ( int b = 0; b < bevanda.length; b++ ) {
                        for ( int s = 0; s < sigarette.length; s++ ){
                            for ( int p = 0; p < posizione.length; p++ ){
                                ksession.insert( new Persona( nazionalita[n],
                                                 colore[c],animale[a],bevanda[b],sigarette[s],posizione[p] ) );
                            }
                        }
                    }
                }
            }
        }

        ksession.fireAllRules();

        ksession.dispose();
    }
    
     public static class Persona {
        private String nazionalita;
        private String coloreCasa;
        private String animale;
        private String bevanda;
        private String fuma;
        private int    posizione;

        public Persona() {
        }

        public Persona(String nazionalita,
                      String coloreCasa,
                      String animale,
                      String bevanda,
                      String fuma,
                      int posizione) {
            super();
            this.nazionalita = nazionalita;
            this.coloreCasa = coloreCasa;
            this.animale = animale;
            this.bevanda = bevanda;
            this.fuma = fuma;
            this.posizione = posizione;
        }

        public String getColoreCasa() {
            return this.coloreCasa;
        }
      
        public String getNazionalita() {
            return this.nazionalita;
        }

         public String getAnimale() {
            return this.animale;
        }
      
        public String getBevanda() {
            return this.bevanda;
        }
        
        public String getFuma() {
            return this.fuma;
        }
        
        public int getPosizione() {
            return this.posizione;
        }

    }

}
